[Flags]
public enum class AdapterFlag
{
    None = DXGI_ADAPTER_FLAG_NONE,
    Remote = DXGI_ADAPTER_FLAG_REMOTE,
    ForceDwordDXGI_ADAPTER_FLAG_FORCE_DWORD,
};

[Flags]
public enum class EnumerationModeFlag 
{
	Interlaced = DXGI_ENUM_MODES_INTERLACED,
	Scaling = DXGI_ENUM_MODES_SCALING
};

public enum class Error
{
	InvalidCall = DXGI_ERROR_INVALID_CALL,
	NotFound = DXGI_ERROR_NOT_FOUND,
	MoreData = DXGI_ERROR_MORE_DATA,
	Unsupported = DXGI_ERROR_UNSUPPORTED,
	DeviceRemoved = DXGI_ERROR_DEVICE_REMOVED,
	DeviceHung = DXGI_ERROR_DEVICE_HUNG,
	DeviceReset = DXGI_ERROR_DEVICE_RESET,
	WasStillDrawing = DXGI_ERROR_WAS_STILL_DRAWING,
	FrameStatisticsDisjoint = DXGI_ERROR_FRAME_STATISTICS_DISJOINT,
	GraphicsVidpnSourceInUse = DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE,
	DriverInternalError = DXGI_ERROR_DRIVER_INTERNAL_ERROR,
	Nonexclusive = DXGI_ERROR_NONEXCLUSIVE,
	NotCurrentlyAvailable = DXGI_ERROR_NOT_CURRENTLY_AVAILABLE,
	RemoteClientDisconnected = DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED,
	RemoteOutOfMemory = DXGI_ERROR_REMOTE_OUTOFMEMORY
};

public enum class Format
{
	Unknown = DXGI_FORMAT_UNKNOWN,
	R32G32B32A32_Typeless = DXGI_FORMAT_R32G32B32A32_TYPELESS,
	R32G32B32A32_Float = DXGI_FORMAT_R32G32B32A32_FLOAT,
	R32G32B32A32_UInt = DXGI_FORMAT_R32G32B32A32_UINT,
	R32G32B32A32_SInt = DXGI_FORMAT_R32G32B32A32_SINT,
	R32G32B32_Typeless = DXGI_FORMAT_R32G32B32_TYPELESS,
	R32G32B32_Float = DXGI_FORMAT_R32G32B32_FLOAT,
	R32G32B32_UInt = DXGI_FORMAT_R32G32B32_UINT,
	R32G32B32_SInt = DXGI_FORMAT_R32G32B32_SINT,
	R16G16B16A16_Typeless = DXGI_FORMAT_R16G16B16A16_TYPELESS,
	R16G16B16A16_Float = DXGI_FORMAT_R16G16B16A16_FLOAT,
	R16G16B16A16_UNorm = DXGI_FORMAT_R16G16B16A16_UNORM,
	R16G16B16A16_UInt = DXGI_FORMAT_R16G16B16A16_UINT,
	R16G16B16A16_SNorm = DXGI_FORMAT_R16G16B16A16_SNORM,
	R16G16B16A16_SInt = DXGI_FORMAT_R16G16B16A16_SINT,
	R32G32_Typeless = DXGI_FORMAT_R32G32_TYPELESS,
	R32G32_Float = DXGI_FORMAT_R32G32_FLOAT,
	R32G32_UInt = DXGI_FORMAT_R32G32_UINT,
	R32G32_SInt = DXGI_FORMAT_R32G32_SINT,
	R32G8X24_Typeless = DXGI_FORMAT_R32G8X24_TYPELESS,
	D32_Float_S8X24_UInt = DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
	R32_Float_X8X24_Typeless = DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
	X32_Typeless_G8X24_UInt = DXGI_FORMAT_X32_TYPELESS_G8X24_UINT,
	R10G10B10A2_Typeless = DXGI_FORMAT_R10G10B10A2_TYPELESS,
	R10G10B10A2_UNorm = DXGI_FORMAT_R10G10B10A2_UNORM,
	R10G10B10A2_UInt = DXGI_FORMAT_R10G10B10A2_UINT,
	R11G11B10_Float = DXGI_FORMAT_R11G11B10_FLOAT,
	R8G8B8A8_Typeless = DXGI_FORMAT_R8G8B8A8_TYPELESS,
	R8G8B8A8_UNorm = DXGI_FORMAT_R8G8B8A8_UNORM,
	R8G8B8A8_UNorm_SRGB = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
	R8G8B8A8_UInt = DXGI_FORMAT_R8G8B8A8_UINT,
	R8G8B8A8_SNorm = DXGI_FORMAT_R8G8B8A8_SNORM,
	R8G8B8A8_SInt = DXGI_FORMAT_R8G8B8A8_SINT,
	R16G16_Typeless = DXGI_FORMAT_R16G16_TYPELESS,
	R16G16_Float = DXGI_FORMAT_R16G16_FLOAT,
	R16G16_UNorm = DXGI_FORMAT_R16G16_UNORM,
	R16G16_UInt = DXGI_FORMAT_R16G16_UINT,
	R16G16_SNorm = DXGI_FORMAT_R16G16_SNORM,
	R16G16_SInt = DXGI_FORMAT_R16G16_SINT,
	R32_Typeless = DXGI_FORMAT_R32_TYPELESS,
	D32_Float = DXGI_FORMAT_D32_FLOAT,
	R32_Float = DXGI_FORMAT_R32_FLOAT,
	R32_UInt = DXGI_FORMAT_R32_UINT,
	R32_SInt = DXGI_FORMAT_R32_SINT,
	R24G8_Typeless = DXGI_FORMAT_R24G8_TYPELESS,
	D24_UNorm_S8_UInt = DXGI_FORMAT_D24_UNORM_S8_UINT,
	R24_UNorm_X8_Typeless = DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
	X24_Typeless_G8_UInt = DXGI_FORMAT_X24_TYPELESS_G8_UINT,
	R8G8_Typeless = DXGI_FORMAT_R8G8_TYPELESS,
	R8G8_UNorm = DXGI_FORMAT_R8G8_UNORM,
	R8G8_UInt = DXGI_FORMAT_R8G8_UINT,
	R8G8_SNorm = DXGI_FORMAT_R8G8_SNORM ,
	R8G8_SInt = DXGI_FORMAT_R8G8_SINT,
	R16_Typeless = DXGI_FORMAT_R16_TYPELESS,
	R16_Float = DXGI_FORMAT_R16_FLOAT,
	D16_UNorm = DXGI_FORMAT_D16_UNORM,
	R16_UNorm = DXGI_FORMAT_R16_UNORM,
	R16_UInt = DXGI_FORMAT_R16_UINT ,
	R16_SNorm = DXGI_FORMAT_R16_SNORM ,
	R16_SInt = DXGI_FORMAT_R16_SINT,
	R8_Typeless = DXGI_FORMAT_R8_TYPELESS,
	R8_UNorm = DXGI_FORMAT_R8_UNORM,
	R8_UInt = DXGI_FORMAT_R8_UINT,
	R8_SNorm = DXGI_FORMAT_R8_SNORM,
	R8_SInt = DXGI_FORMAT_R8_SINT,
	A8_UNorm = DXGI_FORMAT_A8_UNORM,
	R1_UNorm = DXGI_FORMAT_R1_UNORM,
	R9G9B9E5_SharedExp = DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
	R8G8_B8G8_UNorm = DXGI_FORMAT_R8G8_B8G8_UNORM,
	G8R8_G8B8_UNorm = DXGI_FORMAT_G8R8_G8B8_UNORM,
	BC1_Typeless = DXGI_FORMAT_BC1_TYPELESS,
	BC1_UNorm = DXGI_FORMAT_BC1_UNORM,
	BC1_UNorm_SRGB = DXGI_FORMAT_BC1_UNORM_SRGB,
	BC2_Typeless = DXGI_FORMAT_BC2_TYPELESS,
	BC2_UNorm = DXGI_FORMAT_BC2_UNORM,
	BC2_UNorm_SRGB = DXGI_FORMAT_BC2_UNORM_SRGB,
	BC3_Typeless = DXGI_FORMAT_BC3_TYPELESS,
	BC3_UNorm = DXGI_FORMAT_BC3_UNORM,
	BC3_UNorm_SRGB = DXGI_FORMAT_BC3_UNORM_SRGB,
	BC4_Typeless = DXGI_FORMAT_BC4_TYPELESS,
	BC4_UNorm = DXGI_FORMAT_BC4_UNORM,
	BC4_SNorm = DXGI_FORMAT_BC4_SNORM,
	BC5_Typeless = DXGI_FORMAT_BC5_TYPELESS,
	BC5_UNorm = DXGI_FORMAT_BC5_UNORM,
	BC5_SNorm = DXGI_FORMAT_BC5_SNORM,
	B5G6R5_UNorm = DXGI_FORMAT_B5G6R5_UNORM,
	B5G5R5A1_UNorm = DXGI_FORMAT_B5G5R5A1_UNORM,
	B8G8R8A8_UNorm = DXGI_FORMAT_B8G8R8A8_UNORM,
	B8G8R8X8_UNorm = DXGI_FORMAT_B8G8R8X8_UNORM,
};

[Flags]
public enum class MakeWindowAssociationFlag
{
	NoWindowChanges = DXGI_MWA_NO_WINDOW_CHANGES,
	NoAltEnter = DXGI_MWA_NO_ALT_ENTER,
	NoPrintScreen = DXGI_MWA_NO_PRINT_SCREEN
};

[Flags]
public enum class MapFlag
{
	Read = DXGI_MAP_READ,	
	Write = DXGI_MAP_WRITE,	
	Discard = DXGI_MAP_DISCARD
};

public enum class ModeRotation
{
	Unspecified = DXGI_MODE_ROTATION_UNSPECIFIED,
	Identity = DXGI_MODE_ROTATION_IDENTITY,
	Rotate90 = DXGI_MODE_ROTATION_ROTATE90,
	Rotate180 = DXGI_MODE_ROTATION_ROTATE180,
	Rotate270 = DXGI_MODE_ROTATION_ROTATE270,
};

public enum class ModeScaling
{
	Unspecified = DXGI_MODE_SCALING_UNSPECIFIED,
	Centered = DXGI_MODE_SCALING_CENTERED,
	Stretched = DXGI_MODE_SCALING_STRETCHED
};

public enum class ModeScanlineOrder
{
	Unspecified = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED,
	Progressive = DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE,
	UpperFieldFirst = DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST,
	LowerFieldFirst = DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST
};

[Flags]
public enum class PresentFlag
{
	DoNotSequence = DXGI_PRESENT_DO_NOT_SEQUENCE,
	Restart = DXGI_PRESENT_RESTART,
	Test = DXGI_PRESENT_TEST
};

[Flags]
public enum class ResidencyFlag
{
    Resident = DXGI_RESIDENCY_FULLY_RESIDENT,
    ResidentInsharedMemory = DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY,
    EvictedToDisk = DXGI_RESIDENCY_EVICTED_TO_DISK,
};				  

public enum class ResourcePriority
{
	Minimum = DXGI_RESOURCE_PRIORITY_MINIMUM,
	Low = DXGI_RESOURCE_PRIORITY_LOW,
	Normal = DXGI_RESOURCE_PRIORITY_NORMAL,
	High = DXGI_RESOURCE_PRIORITY_HIGH,
	Maximum = DXGI_RESOURCE_PRIORITY_MAXIMUM
};

[Flags]
public enum class SwapChainFlag
{
	NonPrerotated = DXGI_SWAP_CHAIN_FLAG_NONPREROTATED,
	AllowModeSwitch = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH
};

public enum class SwapEffect
{
	Discard = DXGI_SWAP_EFFECT_DISCARD,
	Sequential = DXGI_SWAP_EFFECT_SEQUENTIAL
};

public enum class Status
{
	Occluded = DXGI_STATUS_OCCLUDED,
	Clipped = DXGI_STATUS_CLIPPED,
	NoRedirection = DXGI_STATUS_NO_REDIRECTION,
	NoDesktopAccess = DXGI_STATUS_NO_DESKTOP_ACCESS,
	VideoPresentNetworkSourceInUse = DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE,
	ModeChanged = DXGI_STATUS_MODE_CHANGED,
	ModeChangeInProgress = DXGI_STATUS_MODE_CHANGE_IN_PROGRESS ,
};

[Flags]
public enum class UsageFlag
{
	ShaderInput = DXGI_USAGE_SHADER_INPUT,
	RenderTargetOutput = DXGI_USAGE_RENDER_TARGET_OUTPUT,
	BackBuffer = DXGI_USAGE_BACK_BUFFER,
	Shared = DXGI_USAGE_SHARED,
	ReadOnly = DXGI_USAGE_READ_ONLY,
	DiscardOnPresent = DXGI_USAGE_DISCARD_ON_PRESENT,
	UnorderedAccess = DXGI_USAGE_UNORDERED_ACCESS
};